package com.ruoyi.web.controller.system;


import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.MaterialCutting.LaserModule;
import com.ruoyi.system.domain.MaterialCutting.LayoutModule;
import com.ruoyi.system.domain.vo.*;
import com.ruoyi.system.mapper.LaserModuleMapper;
import com.ruoyi.system.mapper.LayoutModuleMapper;
import org.apache.commons.collections4.Get;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;

import static com.ruoyi.common.utils.PageUtils.startPage;


@RestController
@RequestMapping("/LayoutModuleM")
public class LayoutModuleController extends BaseController {

    @Autowired
    private LaserModuleMapper laserModuleMapper;
    @Autowired
    private LayoutModuleMapper layoutModuleMapper;

    /**
     * 排版查询数据
     * @param selectByApplicationName
     * @return
     */
    @PostMapping("/selectByName")
    public TableDataInfo selectByName(@RequestBody SelectByLaserModule selectByApplicationName) throws ParseException {
         startPage();
         if (selectByApplicationName.getBeginReceptionTime() != null){
             String beginDate = selectByApplicationName.getBeginReceptionTime().toString();
             SimpleDateFormat sdfSource1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
             // 定义目标格式的格式化器
             SimpleDateFormat sdfTarget1 = new SimpleDateFormat("yyyy-MM-dd");
             // 解析并格式化
             Date date1 = sdfSource1.parse(beginDate);
             String targetDate1 = sdfTarget1.format(date1);
             String beginDateTime = targetDate1 + " 00:00:00";
             String endDateTime = targetDate1 + " 23:59:59";
             DateTimeFormatter beginFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             LocalDateTime localDateTime = LocalDateTime.parse(beginDateTime, beginFormatter);
             LocalDateTime endlocalDateTime = LocalDateTime.parse(endDateTime, beginFormatter);
             // 2. 转换为 java.util.Date（通过系统默认时区）
             Date startdate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
             Date enddate = Date.from(endlocalDateTime.atZone(ZoneId.systemDefault()).toInstant());
             selectByApplicationName.setBeginReceptionTime(startdate);
             selectByApplicationName.setEndReceptionTime(enddate);
         }

        List<Map<String, String>> re = new ArrayList<>();
        Set<Long> seen = new HashSet<>();
        List<LaserModule> laserModules = laserModuleMapper.selectLaserModuleData(selectByApplicationName)
                .stream().filter(laserModule -> seen.add(laserModule.getLayId())).collect(Collectors.toList());
        for (Long layId: seen) {
            Map<String, String> resultMap = new HashMap<>();
            LayoutModule layoutModule = layoutModuleMapper.selectById(layId);
            List<LaserModule> laserModules1 = laserModuleMapper.selectByLayId(layId);
            for (LaserModule l:laserModules1) {
                resultMap.put("applicationName",layoutModule.getApplicationName());
                resultMap.put("boardType",l.getBoardType());
                resultMap.put("plateThickness",l.getPlateThickness());
                resultMap.put("layId",layId.toString());
            }

            String originalDate = layoutModule.getCompletionTime().toString();
            // 定义原始格式的解析器（注意 Locale.US 处理英文月份/星期）
            SimpleDateFormat sdfSource = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
            // 定义目标格式的格式化器
            SimpleDateFormat sdfTarget = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            // 解析并格式化
            Date date = sdfSource.parse(originalDate);
            String targetDate = sdfTarget.format(date);
            resultMap.put("completionTime",targetDate);
            re.add(resultMap);
        }
        return getDataTable(re);

    }
//    @PostMapping("/selectByName")
//    public TableDataInfo selectByName(@RequestBody SelectByLaserModule selectByApplicationName) throws ParseException {
//        startPage();
//        List<Map<String, String>> re = new ArrayList<>();
//        List<LaserModule> laserModules = laserModuleMapper.selectLaserModuleData(selectByApplicationName);
//        Map<String, String> resultMap = new HashMap<>();
//        Long layId = laserModules.get(0).getLayId();
//        LayoutModule layoutModule = layoutModuleMapper.selectById(layId);
//        resultMap.put("applicationName",layoutModule.getApplicationName());
//        resultMap.put("boardType",laserModules.get(0).getBoardType());
//        resultMap.put("plateThickness",laserModules.get(0).getPlateThickness());
//        resultMap.put("layId",laserModules.get(0).getLayId().toString());
//        String originalDate = layoutModule.getCompletionTime().toString();
//        // 定义原始格式的解析器（注意 Locale.US 处理英文月份/星期）
//        SimpleDateFormat sdfSource = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
//        // 定义目标格式的格式化器
//        SimpleDateFormat sdfTarget = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        // 解析并格式化
//        Date date = sdfSource.parse(originalDate);
//        String targetDate = sdfTarget.format(date);
//        resultMap.put("completionTime",targetDate);
//        re.add(resultMap);
//        return getDataTable(re);
//
//    }

    /**
     * 根据layID查询详细数据
     * @param layId
     * @return
     */
    @GetMapping("/selectDetailsById")
    public R selectDetailsById(@RequestParam Long layId){
        List<LaserModule> laserModules = laserModuleMapper.selectByLayId(layId);
        return R.ok(laserModules);
    }

    /**
     * 激光确认是否完成(单独确认)
     * @param laserUpdateData
     * @return
     */
    @PostMapping("/UpdateData")
    public R updateData(@RequestBody LaserUpdateData laserUpdateData){
        if (laserUpdateData == null){
            return R.fail("确认失败，请联系管理员处理");
        }
        int data = laserModuleMapper.updateDataById(laserUpdateData);
        if (data < 1){
            return R.fail("确认失败，请联系管理员处理");
        }
        return R.ok();
    }

    /**
     * 激光确认是否完成(批量确认)
     * @param laserUpdateData
     * @return
     */
    @PostMapping("/batchUpdate")
    public R batchUpdateData(@RequestBody List<LaserUpdateData> laserUpdateData){
        List<LaserUpdateData> updateDatas = new ArrayList<>();
        for (LaserUpdateData l : laserUpdateData) {
            LaserUpdateData updateData = new LaserUpdateData();
            updateData.setId(l.getId());
            updateData.setCompleted("已完成");
            Calendar calendar = Calendar.getInstance();
            // 转换为Date类型
            Date currentDate = calendar.getTime();
            updateData.setCompletionTime(currentDate);
            updateDatas.add(updateData);
        }
        int data = laserModuleMapper.batchUpdate(updateDatas);
        if (data < 1){
            return R.fail("确认失败，请联系管理员处理");
        }
        return R.ok(data);
    }


    /**
     * 查询激光数据
     * @param selectByLaserModule
     * @return
     */
    @PostMapping("/selectLaserData")
    public TableDataInfo selectLaserData(@RequestBody SelectByLaserModule selectByLaserModule){
        startPage();
        List<LaserModule> laserModules = laserModuleMapper.selectLaserModuleData(selectByLaserModule);
        return getDataTable(laserModules);
    }
}
